class Solution {
    public int findShortestSubArray(int[] nums) {
        Map<Integer, int[]> map = new HashMap();
        for(int i=0; i<nums.length; i++){
            if(map.containsKey(nums[i])){
                int[] info = map.get(nums[i]);
                info[0]++;
                info[2] = i;
                map.put(nums[i], info);
            }else{
                //新建一个数组，0位置保存出现的次数，1位置保存第一次出现的位置，2位置保存最新一次出现的位置
                int[] info = {1,i,i};
                map.put(nums[i], info);
            }
        }
        //出现的次数
        int count = 0;
        //长度
        int length = 0;
        for(int[] info : map.values()){
            //次数大于已统计的次数时更新次数和长度
            if(info[0]>count){
                count = info[0];
                length = info[2] - info[1] + 1;
            }
            //次数相同时统计最短的长度
            if(info[0]==count){
                length = Math.min(length, info[2] - info[1] + 1);
            }
        }
        return length;
    }
}